home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / CUJ9204.ARJ / 1004108A < prev    next >
Text File  |  1992-06-02  |  2KB  |  94 lines

  1.  
  2. Listing 6
  3. ************
  4.  
  5.  
  6. struct rec {
  7.    char name[31];
  8.    char address[21];
  9.    char city[16];
  10.    char state[3];
  11.    char zip[6];
  12.    };
  13. static int field_sizes[] = {31, 21, 16, 3, 6};
  14. /*
  15. Alternatively, this could be written as:
  16.  
  17. static int field_sizes[] = {    sizeof(rec.name),
  18.    sizeof(rec.address),
  19.    ...
  20.    };
  21. */
  22. #define field_count (sizeof(field_sizes)/sizeof(int));
  23.  
  24.    main()
  25.        {
  26.       char record_in[MAX];
  27.       struct rec record;
  28.       ...
  29.       while(fgets(record_inn, MAX, filin) != NULL)
  30.            {
  31.            load_struct(&record, record_in, field_sizes, 
  32. field_count, TRUE);
  33.            print_struct(&record, field_sizes, field_count, TRUE);
  34.            ...
  35.            }
  36.       }
  37.  
  38. print_struct(record, field_sizes, field_count, nul_terminated)
  39. char *record;          /* Record to print */
  40. int field_sizes[];     /* Size of fields */
  41. int field_count;       /* Number of fields */
  42. int nul_terminated;    /* If fields are nul terminated */    
  43.    {
  44.    int field;
  45.    int length;
  46.    char *pc;
  47.  
  48.    printf("\n");
  49.    pc = record;
  50.    for (field = 0; field < field_count; field++)
  51.        {
  52.        if (nul_terminated)
  53.           printf("%s:",pc);
  54.        else
  55.           {
  56.           length = field_sizes[field];  
  57.           printf("%.*s:", length, pc);
  58.           } 
  59.        pc += field_sizes[field];
  60.        }
  61.    }
  62.  
  63. load_struct(record, record_in, field_sizes, field_count, 
  64. nul_terminated)
  65. char *record;
  66. char *record_in;
  67. int field_sizes[];
  68. int field_count;
  69. int nul_terminated; /* If fields out should be nul terminated */
  70.    {
  71.    int field;
  72.    int length;
  73.    char *pc;
  74.    char *pc_in;
  75.  
  76.    pc = record;
  77.    pc_in = record_in;
  78.    for (field = 0; field < field_count; field++)
  79.        {
  80.        length = field_sizes[field];
  81.        strncpy(pc, pc_in, length);
  82.        if (nul_terminated)
  83.            {
  84.            pc[length-1] = '\0';
  85.            pc_in += length - 1;
  86.            }
  87.        else
  88.            pc_in += length;
  89.        pc += field_sizes[field];
  90.        }
  91.    }
  92. ********
  93.  
  94.